package main

import "fmt"

func MiGong() {
	//首先创建一个二维迷宫,模拟迷宫
	//创建8行7列
	//规则
	//1.如果元素的值为1,就是墙
	//2.如果元素的值为0,是没走过的点
	//3.如果元素的值为2,是一个通路
	//4.如果元素的值为3,就是走过的点,但是走不通

	var myMap [8][7]int

	for i := 0; i < 7; i++ {
		myMap[0][i] = 1
		myMap[7][i] = 1
	}

	for i := 0; i < 8; i++ {
		myMap[i][0] = 1
		myMap[i][6] = 1
	}
	myMap[3][1] = 1
	myMap[3][2] = 1
	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Print(myMap[i][j], " ")
		}
		fmt.Println()
	}
	fmt.Println("测试完毕...")
	SetWay(&myMap, 1, 1)
	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Print(myMap[i][j], " ")
		}
		fmt.Println()
	}
}

//myMap *[8][7]int 地图 保证是同一个地图,使用引用
//i, j 分别对地图的哪个点进行测试
func SetWay(myMap *[8][7]int, i int, j int) bool {
	if myMap[6][5] == 2 {
		return true
	}
	//策略 上 下 左 右
	if myMap[i][j] == 0 {
		myMap[i][j] = 2
		if SetWay(myMap, i+1, j) { //下
			return true
		} else if SetWay(myMap, i, j+1) { //右
			return true
		} else if SetWay(myMap, i-1, j) { //上
			return true
		} else if SetWay(myMap, i, j-1) { //左
			return true
		}
		myMap[i][j] = 3
	}
	return false
}
